home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / var / lib / python-support / python2.6 / rdflib / syntax / parsers / TriXHandler.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  6.5 KB  |  198 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. '''
  5. '''
  6. from rdflib import RDF, RDFS, Namespace
  7. from rdflib import URIRef, BNode, Literal
  8. from rdflib.Graph import Graph
  9. from rdflib.exceptions import ParserError, Error
  10. from rdflib.syntax.xml_names import is_ncname
  11. from xml.sax.saxutils import handler, quoteattr, escape
  12. from urlparse import urljoin, urldefrag
  13. RDFNS = RDF.RDFNS
  14. TRIXNS = Namespace('http://www.w3.org/2004/03/trix/trix-1/')
  15.  
  16. class TriXHandler(handler.ContentHandler):
  17.     '''An Sax Handler for TriX. See http://swdev.nokia.com/trix/TriX.html'''
  18.     
  19.     def __init__(self, store):
  20.         self.store = store
  21.         self.preserve_bnode_ids = False
  22.         self.reset()
  23.  
  24.     
  25.     def reset(self):
  26.         self.bnode = { }
  27.         self.graph = self.store
  28.         self.triple = None
  29.         self.state = 0
  30.         self.lang = None
  31.         self.datatype = None
  32.  
  33.     
  34.     def setDocumentLocator(self, locator):
  35.         self.locator = locator
  36.  
  37.     
  38.     def startDocument(self):
  39.         pass
  40.  
  41.     
  42.     def startPrefixMapping(self, prefix, namespace):
  43.         pass
  44.  
  45.     
  46.     def endPrefixMapping(self, prefix):
  47.         pass
  48.  
  49.     
  50.     def startElementNS(self, name, qname, attrs):
  51.         if name[0] != TRIXNS:
  52.             self.error('Only elements in the TriX namespace are allowed.')
  53.         
  54.         if name[1] == 'TriX':
  55.             if self.state == 0:
  56.                 self.state = 1
  57.             else:
  58.                 self.error('Unexpected TriX element')
  59.         elif name[1] == 'graph':
  60.             if self.state == 1:
  61.                 self.state = 2
  62.             else:
  63.                 self.error('Unexpected graph element')
  64.         elif name[1] == 'uri':
  65.             if self.state == 2:
  66.                 self.state = 3
  67.             elif self.state == 4:
  68.                 pass
  69.             else:
  70.                 self.error('Unexpected uri element')
  71.         elif name[1] == 'triple':
  72.             if self.state == 2:
  73.                 self.triple = []
  74.                 self.state = 4
  75.             else:
  76.                 self.error('Unexpected triple element')
  77.         elif name[1] == 'typedLiteral':
  78.             if self.state == 4:
  79.                 self.lang = None
  80.                 self.datatype = None
  81.                 
  82.                 try:
  83.                     self.lang = attrs.getValueByQName('lang')
  84.                 except:
  85.                     pass
  86.  
  87.                 
  88.                 try:
  89.                     self.datatype = attrs.getValueByQName('datatype')
  90.                 except KeyError:
  91.                     self.error("No required attribute 'datatype'")
  92.                 except:
  93.                     None<EXCEPTION MATCH>KeyError
  94.                 
  95.  
  96.             None<EXCEPTION MATCH>KeyError
  97.             self.error('Unexpected typedLiteral element')
  98.         elif name[1] == 'plainLiteral':
  99.             if self.state == 4:
  100.                 self.lang = None
  101.                 self.datatype = None
  102.                 
  103.                 try:
  104.                     self.lang = attrs.getValueByQName('lang')
  105.  
  106.             else:
  107.                 self.error('Unexpected plainLiteral element')
  108.         elif name[1] == 'id':
  109.             if self.state == 2:
  110.                 self.state = 3
  111.             elif self.state == 4:
  112.                 pass
  113.             else:
  114.                 self.error('Unexpected id element')
  115.         else:
  116.             self.error('Unknown element %s in TriX namespace' % name[1])
  117.         self.chars = ''
  118.  
  119.     
  120.     def endElementNS(self, name, qname):
  121.         if name[0] != TRIXNS:
  122.             self.error('Only elements in the TriX namespace are allowed.')
  123.         
  124.         if name[1] == 'uri':
  125.             if self.state == 3:
  126.                 self.graph = Graph(store = self.store.store, identifier = URIRef(self.chars.strip()))
  127.                 self.state = 2
  128.             elif self.state == 4:
  129.                 self.triple += [
  130.                     URIRef(self.chars.strip())]
  131.             else:
  132.                 self.error('Illegal internal self.state - This should never happen if the SAX parser ensures XML syntax correctness')
  133.         
  134.         if name[1] == 'id':
  135.             if self.state == 3:
  136.                 self.graph = Graph(self.store.store, identifier = self.get_bnode(self.chars.strip()))
  137.                 self.state = 2
  138.             elif self.state == 4:
  139.                 self.triple += [
  140.                     self.get_bnode(self.chars.strip())]
  141.             else:
  142.                 self.error('Illegal internal self.state - This should never happen if the SAX parser ensures XML syntax correctness')
  143.         
  144.         if name[1] == 'plainLiteral' or name[1] == 'typedLiteral':
  145.             if self.state == 4:
  146.                 self.triple += [
  147.                     Literal(self.chars, lang = self.lang, datatype = self.datatype)]
  148.             else:
  149.                 self.error('This should never happen if the SAX parser ensures XML syntax correctness')
  150.         
  151.         if name[1] == 'triple':
  152.             if self.state == 4:
  153.                 if len(self.triple) != 3:
  154.                     self.error('Triple has wrong length, got %d elements: %s' % (len(self.triple), self.triple))
  155.                 
  156.                 self.graph.add(self.triple)
  157.                 self.state = 2
  158.             else:
  159.                 self.error('This should never happen if the SAX parser ensures XML syntax correctness')
  160.         
  161.         if name[1] == 'graph':
  162.             self.state = 1
  163.         
  164.         if name[1] == 'TriX':
  165.             self.state = 0
  166.         
  167.  
  168.     
  169.     def get_bnode(self, label):
  170.         if self.preserve_bnode_ids:
  171.             bn = BNode(label)
  172.         elif label in self.bnode:
  173.             bn = self.bnode[label]
  174.         else:
  175.             bn = BNode(label)
  176.             self.bnode[label] = bn
  177.         return bn
  178.  
  179.     
  180.     def characters(self, content):
  181.         self.chars += content
  182.  
  183.     
  184.     def ignorableWhitespace(self, content):
  185.         pass
  186.  
  187.     
  188.     def processingInstruction(self, target, data):
  189.         pass
  190.  
  191.     
  192.     def error(self, message):
  193.         locator = self.locator
  194.         info = '%s:%s:%s: ' % (locator.getSystemId(), locator.getLineNumber(), locator.getColumnNumber())
  195.         raise ParserError(info + message)
  196.  
  197.  
  198.